// 预处理文本（统一格式）
function cleanText(text) {
  return text.trim().replace(/[\s　]/g, ' '); // 统一空格，去除全角空格
}

// 提取电话号码（支持多号码，取最可能的一个）
function extractPhone(text) {
  // 手机号优先匹配（避免固定电话区号与手机号前3位冲突）
  const mobileReg = /1[3-9]\d{9}/;
  const phoneReg = /(\d{3,4}-?)?\d{7,8}(x\d{1,4})?/;
  
  let phone = null;
  // 先找手机号
  if (mobileReg.test(text)) {
    phone = text.match(mobileReg)[0];
  } else {
    // 找固定电话
    const match = text.match(phoneReg);
    if (match) phone = match[0].replace(/-/g, ''); // 去除分隔符
  }
  return phone;
}


const addressKeywords = new Set([
  '省', '市', '区', '县', '镇', '村', '街道', '路', '巷', '弄', '号',
  '工业园', '开发区', '小区', '花园', '栋', '单元', '层', '室'
]);
// 拆分地址和姓名（关键逻辑）
function splitNameAndAddress(remainingText) {
  // 按地址关键词分割，找到最长匹配的地址前缀
  let address = '';
  let name = remainingText;
  
  // 从后往前匹配（地址通常在末尾，如“张三 北京海淀”）
  for (let i = remainingText.length; i > 0; i--) {
    const substr = remainingText.substr(0, i);
    // 检查是否包含地址关键词，且长度>2（避免误判短地址）
    if (Array.from(addressKeywords).some(word => substr.includes(word)) && i > 2) {
      address = substr;
      name = remainingText.substr(i).trim();
      break;
    }
  }
  
  // 若未匹配到地址关键词（如姓名在末尾），尝试从前往后匹配短姓名（1-4字）
  if (!address) {
    const nameCandidates = remainingText.match(/^[\u4e00-\u9fa5]{1,4}/); // 匹配1-4个汉字
    if (nameCandidates) {
      name = nameCandidates[0];
      address = remainingText.substr(name.length).trim();
    }
  }
  
  return { name, address };
}

function splitContactInfo(text) {
  const cleaned = cleanText(text);
  const phone = extractPhone(cleaned);
  const remaining = cleaned.replace(phone || '', '').trim();
  if (!remaining) return { name: '', address: '', phone: phone || '' };
  
  const { name, address } = splitNameAndAddress(remaining);
  return { name, address, phone };
}

function extractInformation(text) {
  // 识别姓名（假设姓名为 2 到 4 个中文字符）
  const nameRegex = /[\u4e00-\u9fa5]{2,4}/;
  const nameMatch = text.match(nameRegex);
  const name = nameMatch? nameMatch[0] : null;

  // 识别电话号码（简单匹配 11 位数字）
  const phoneRegex = /\d{11}/;
  const phoneMatch = text.match(phoneRegex);
  const phone = phoneMatch? phoneMatch[0] : null;

  // 识别地址（假设地址包含省、市、区等关键词）
  const addressRegex = /([\u4e00-\u9fa5]+(省|市|自治区|特别行政区)[\u4e00-\u9fa5]+(市|区|县|自治州)[\u4e00-\u9fa5]*)/;
  const addressMatch = text.match(addressRegex);
  const address = addressMatch? addressMatch[0] : null;

  return {
    name,
    phone,
    address
  };
}

module.exports = splitContactInfo;